// 前言
// 1. 顺序表和链表，都属于数据结构的一部分。
// 2. 数据结构：C的数据结构 和 JAVA 的数据结构，有什么不一样？
//     数据结构 只是一个单独的学科。和语言没有关系。
//     语言的不同，只是决定了实现同一种逻辑的方法不同而已。
// 3. 数据结构：逻辑非常严谨的一门学科，要向学号数据结构
//   必须做到两点 ：1.多画图 ， 2.多写代码  （别抄）

// 顺序表和链表 是 数组 与 类和对象 的一种整合。
// 顺序表和链表 是 数据结构的基础。非常重要。

//线性表
// 线性表（linear list）是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构，常见的线性表：顺序表、链表、栈、队列、字符串...
//    线性表在逻辑上是线性结构，也就说是连续的一条直线。但是在物理结构上并不一定是连续的，线性表在物理上存储时，通常以数组和链式结构的形式存储
// 图 1


// 顺序表（一个面向对象的数组）
//概念及结构
//        顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构，一般情况下采用数组存储。在数组上完成数据的增删查改。
// 可以这么去理解 顺序表 是一个面向对象的数组。但是一个数组是不能自己面向对象，我们需要提供一些方法，来对数组进行增删查改。
// 那么把数组这些方法（只用写一次） 和 数组 作为属性 放到一个类里面，将来我用这个类去new对象的时候，通过这个对象我们可以去调用这些方法，去操作数组，这不就是面向对象嘛。
// 简单来说 顺序表 就是 对一个数组进行增删查改。
// 一个普通数组，我们也可以创建一些方法区操作它，但它始终面向不了对象。而且我们每次都需要为数组写操作方法。
// 顺序表一般可以分为：
//        静态顺序表：使用定长数组存储。
//        动态顺序表：使用动态开辟的数组存储
//静态顺序表适用于确定知道需要存多少数据的场景.
//        静态顺序表的定长数组导致N定大了，空间开多了浪费，开少了不够用
//相比之下动态顺序表更灵活, 根据需要分配动态的空间大小

// 顺序表讲解图

// 接下来 我们来 实现 顺序表
public class SequentialAndLinkedLists {
    public static void main(String[] args) {
        // 当我们 创建好 类 MysequentialList,并设置好 属性 和 构造方法时，我们就可以new对象了
        MySequentialList mySequentialList = new MySequentialList();
        // 此时对于我们类的调用者来说，我们只是知道这语句代表一个顺序表，里面提供这对数组元素的增删查改的功能。
        // 身为类的使用者(面向对象)；我们不需要去关注 这些功能是怎么实现的(面向过程)。

        // 此时我们已经写好了 打印顺序表、获取顺序表的有效长度、在 pos 位置新增元素 的顺序表功能
        // 现在 我们来测试一样
        mySequentialList.add(0,1);
        mySequentialList.add(1,2);
        mySequentialList.add(2,3);
        mySequentialList.add(3,4);
        mySequentialList.add(4,5);
        mySequentialList.display();
        System.out.println(mySequentialList.size());
        System.out.println(mySequentialList.search(6));
        System.out.println(mySequentialList.contains(6));
        System.out.println(mySequentialList.getPos(6));
        mySequentialList.setPos(4,99);
        mySequentialList.display();
        mySequentialList.remove(99);
        mySequentialList.display();
        mySequentialList.clear();
        mySequentialList.display();
    }
}
